Exploratory analysis of Retail Trade Sales

Goals

  • Reproduce the Index of the Canadian Economic Dashboard and COVID-19
  • Identify data tables and vectors for the dashboard

Comments

```r
suppressMessages(library(cansim))
suppressMessages(library(ggplot2))
suppressMessages(library(dplyr))
suppressMessages(library(plotly))
source(\../src/utils.R\)

<!-- rnb-source-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


## Extract the Data

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxudmVjdG9yX25hbWVzIDwtIGMoXG4gIFwidjY1MjAxMjEwXCIsIFwidjQxNjkwOTczXCIsIFwidjIwNjI4MDlcIiwgXCJ2MTAwMTgyNzI2NVwiLFxuICBcInYxMDAxODI2NjUzXCIsIFwidjUyMzY3MDk3XCIsIFwidjQzOTE1MDVcIiwgXCJ2ODAwNDUwXCIsXG4gIFwidjMyODU4ODU4XCIsIFwidjMyODU4ODY1XCIsIFwidjMyODU4ODcyXCIsIFwidjc0ODY5XCIsIFwidjEyOTQ0OVwiLFxuICBcInYxMjk0NjBcIiwgXCJ2MTI5NDcyXCIsIFwidjEyOTQ4MlwiXG4pXG5sZW5ndGgodmVjdG9yX25hbWVzKVxuYGBgIn0= -->

```r
vector_names <- c(
  "v65201210", "v41690973", "v2062809", "v1001827265",
  "v1001826653", "v52367097", "v4391505", "v800450",
  "v32858858", "v32858865", "v32858872", "v74869", "v129449",
  "v129460", "v129472", "v129482"
)
length(vector_names)
[1] 16
vector_descr <- c(
  "RealGDP", "CPI", "Employment [pers]", "Int. merchendise trade Exp. [$]",
  "Int. merchendise trade Imp. [$]", "Retail Sales [$]", "hours worked",
  "Manufact. sales [$]", "Aircraft domestic [#]", "Aircraft transborder [#]",
  "Aircraft int other [#]", "Railway carloads [tons]", "Travelers US [pers]",
  "Travelers other country [pers]", "CA resident US [pers]",
  "CAresident other country [pers]"
)
names(vector_descr) <- vector_names

I expect this date to be before the start of all time series/vectors.

start_date <- "1900-01-01"

Retrieve all vectors. They are concatunated along axis 0.

vectors <- get_cansim_vector(vector_names, start_date)
`as.tibble()` is deprecated as of tibble 2.0.0.
Please use `as_tibble()` instead.
The signature and semantics have changed, see `?as_tibble`.
This warning is displayed once every 8 hours.
Call `lifecycle::last_warnings()` to see where this warning was generated.
dim(vectors)
[1] 7506    9
retail_sales <- get_cansim("20-10-0008-01")
hours_worked <- get_cansim("14-10-0289-01")

Preprocessing

Normalization all indicators so that December 2019 = 100

vectors$REF_DATE = as.Date(vectors$REF_DATE)
head(vectors)
vector_names[1]
[1] "v65201210"
length(vector_names)
[1] 16
indicators1 <- vector(length=16)
for (i in 1:length(vector_names)) {
  #print(i)
  indicator = filter(vectors, VECTOR == vector_names[i])
  ref_value = indicator$VALUE[indicator$REF_DATE == as.Date('2019-12-01')]
  indicator$VALUE_INDEX = 100. * indicator$VALUE/ref_value
  if (i == 1) {indicators = indicator}
  else {indicators <- rbind(indicators, indicator)}
  # indicators1[i]  <- indicator
}
head(indicators)
indicators$descr <- sapply(indicators$VECTOR, function(x) {
  vector_descr[x][[1]]
})

Canadian Economic Dashboard

Retail Sales & Hours Worked

p <- ggplot(indicators, aes(x=REF_DATE, y=VALUE_INDEX)) + geom_line((aes(group=descr, color=descr))) +
  scale_x_date(date_breaks="2 month", date_labels="%b %Y", limits = as.Date(c('2019-01-01','2020-06-01'))) + scale_y_continuous(breaks=seq(0, 180,20), limits= c(0, 180)) + labs(title='Index, December 2019=100', x='', y='')
ggplotly(p)
retail_sales_plot = ggplot() + geom_line(data=retail_sales_can, aes(x=REF_DATE, y=VALUE_INDEX, color='green'))
hours_worked_plot = geom_line(data=hours_worked_industries, aes(x=REF_DATE, y=VALUE_INDEX, color='blue')) 

plot = retail_sales_plot +  hours_worked_plot + scale_x_date(date_breaks="2 month", date_labels="%b %Y", limits = as.Date(c('2019-01-01','2020-06-01'))) + scale_y_continuous(breaks=seq(70, 105,5), limits= c(70, 105)) + scale_color_manual(labels = c("Retail trade sales (dollars)", "Actual hours worked"), values = c("blue", "red")) + labs(color='Legend')
plot
#ggplotly(plot)

All Time Series

< - 
#select(hours_worked_plot, c("VALUES"))
hours_worked_industries %>% select(REF_DATE, VALUE_INDEX)
ggplot() + geom_line(data=hours_worked_industries, aes(x=REF_DATE, y=VALUE_INDEX)) 
LS0tCnRpdGxlOiAiVGVzdFNldHVwIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKIyBvdXRwdXQ6IHJtYXJrZG93bjo6Z2l0aHViX2RvY3VtZW50CiMgb3V0cHV0OiAKIyAgaHRtbF9kb2N1bWVudDoKIyAgICBrZWVwX21kOiB0cnVlCi0tLQoKIyBFeHBsb3JhdG9yeSBhbmFseXNpcyBvZiBSZXRhaWwgVHJhZGUgU2FsZXMKCiMjIyBHb2FscwoKKiBSZXByb2R1Y2UgdGhlIEluZGV4IG9mIHRoZSBDYW5hZGlhbiBFY29ub21pYyBEYXNoYm9hcmQgYW5kIENPVklELTE5CiogSWRlbnRpZnkgZGF0YSB0YWJsZXMgYW5kIHZlY3RvcnMgZm9yIHRoZSBkYXNoYm9hcmQKCiMjIyBDb21tZW50cwoKKiBUaW1lIHNlcmllcyBmcm9tIENhbmFkaWFuIEVjb25vbWljIERhc2hib2FyZCBhbmQgQ09WSUQtMTkgYXQgaHR0cHM6Ly93d3cxNTAuc3RhdGNhbi5nYy5jYS9uMS9wdWIvNzEtNjA3LXgvNzEtNjA3LXgyMDIwMDA5LWVuZy5odG0KKiBUaGVyZSBhcmUgMTYgaW5kaWNhdG9ycwoKCmBgYHtyfQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoY2Fuc2ltKSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGdncGxvdDIpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZHBseXIpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkocGxvdGx5KSkKc291cmNlKCIuLi9zcmMvdXRpbHMuUiIpCmBgYAoKIyMgRXh0cmFjdCB0aGUgRGF0YQpgYGB7cn0KdmVjdG9yX25hbWVzIDwtIGMoCiAgInY2NTIwMTIxMCIsICJ2NDE2OTA5NzMiLCAidjIwNjI4MDkiLCAidjEwMDE4MjcyNjUiLAogICJ2MTAwMTgyNjY1MyIsICJ2NTIzNjcwOTciLCAidjQzOTE1MDUiLCAidjgwMDQ1MCIsCiAgInYzMjg1ODg1OCIsICJ2MzI4NTg4NjUiLCAidjMyODU4ODcyIiwgInY3NDg2OSIsICJ2MTI5NDQ5IiwKICAidjEyOTQ2MCIsICJ2MTI5NDcyIiwgInYxMjk0ODIiCikKbGVuZ3RoKHZlY3Rvcl9uYW1lcykKYGBgCgpgYGB7cn0KdmVjdG9yX2Rlc2NyIDwtIGMoCiAgIlJlYWxHRFAiLCAiQ1BJIiwgIkVtcGxveW1lbnQgW3BlcnNdIiwgIkludC4gbWVyY2hlbmRpc2UgdHJhZGUgRXhwLiBbJF0iLAogICJJbnQuIG1lcmNoZW5kaXNlIHRyYWRlIEltcC4gWyRdIiwgIlJldGFpbCBTYWxlcyBbJF0iLCAiaG91cnMgd29ya2VkIiwKICAiTWFudWZhY3QuIHNhbGVzIFskXSIsICJBaXJjcmFmdCBkb21lc3RpYyBbI10iLCAiQWlyY3JhZnQgdHJhbnNib3JkZXIgWyNdIiwKICAiQWlyY3JhZnQgaW50IG90aGVyIFsjXSIsICJSYWlsd2F5IGNhcmxvYWRzIFt0b25zXSIsICJUcmF2ZWxlcnMgVVMgW3BlcnNdIiwKICAiVHJhdmVsZXJzIG90aGVyIGNvdW50cnkgW3BlcnNdIiwgIkNBIHJlc2lkZW50IFVTIFtwZXJzXSIsCiAgIkNBcmVzaWRlbnQgb3RoZXIgY291bnRyeSBbcGVyc10iCikKbmFtZXModmVjdG9yX2Rlc2NyKSA8LSB2ZWN0b3JfbmFtZXMKYGBgCgpJIGV4cGVjdCB0aGlzIGRhdGUgdG8gYmUgYmVmb3JlIHRoZSBzdGFydCBvZiBhbGwgdGltZSBzZXJpZXMvdmVjdG9ycy4KYGBge3J9CnN0YXJ0X2RhdGUgPC0gIjE5MDAtMDEtMDEiCmBgYAoKUmV0cmlldmUgYWxsIHZlY3RvcnMuIFRoZXkgYXJlIGNvbmNhdHVuYXRlZCBhbG9uZyBheGlzIDAuCmBgYHtyfQp2ZWN0b3JzIDwtIGdldF9jYW5zaW1fdmVjdG9yKHZlY3Rvcl9uYW1lcywgc3RhcnRfZGF0ZSkKZGltKHZlY3RvcnMpCmBgYAoKCmBgYHtyfQpyZXRhaWxfc2FsZXMgPC0gZ2V0X2NhbnNpbSgiMjAtMTAtMDAwOC0wMSIpCmhvdXJzX3dvcmtlZCA8LSBnZXRfY2Fuc2ltKCIxNC0xMC0wMjg5LTAxIikKCmBgYAoKIyMgUHJlcHJvY2Vzc2luZwoKTm9ybWFsaXphdGlvbiBhbGwgaW5kaWNhdG9ycyBzbyB0aGF0IERlY2VtYmVyIDIwMTkgPSAxMDAKCmBgYHtyfQp2ZWN0b3JzJFJFRl9EQVRFID0gYXMuRGF0ZSh2ZWN0b3JzJFJFRl9EQVRFKQpgYGAKCgpgYGB7cn0KaGVhZCh2ZWN0b3JzKQpgYGAKCmBgYHtyfQp2ZWN0b3JfbmFtZXNbMV0KYGBgCgpgYGB7cn0KbGVuZ3RoKHZlY3Rvcl9uYW1lcykKYGBgCgoKYGBge3J9CmluZGljYXRvcnMxIDwtIHZlY3RvcihsZW5ndGg9MTYpCmZvciAoaSBpbiAxOmxlbmd0aCh2ZWN0b3JfbmFtZXMpKSB7CiAgI3ByaW50KGkpCiAgaW5kaWNhdG9yID0gZmlsdGVyKHZlY3RvcnMsIFZFQ1RPUiA9PSB2ZWN0b3JfbmFtZXNbaV0pCiAgcmVmX3ZhbHVlID0gaW5kaWNhdG9yJFZBTFVFW2luZGljYXRvciRSRUZfREFURSA9PSBhcy5EYXRlKCcyMDE5LTEyLTAxJyldCiAgaW5kaWNhdG9yJFZBTFVFX0lOREVYID0gMTAwLiAqIGluZGljYXRvciRWQUxVRS9yZWZfdmFsdWUKICBpZiAoaSA9PSAxKSB7aW5kaWNhdG9ycyA9IGluZGljYXRvcn0KICBlbHNlIHtpbmRpY2F0b3JzIDwtIHJiaW5kKGluZGljYXRvcnMsIGluZGljYXRvcil9CiAgIyBpbmRpY2F0b3JzMVtpXSAgPC0gaW5kaWNhdG9yCn0KYGBgCgpgYGB7cn0KaGVhZChpbmRpY2F0b3JzKQpgYGAKCmBgYHtyfQppbmRpY2F0b3JzJGRlc2NyIDwtIHNhcHBseShpbmRpY2F0b3JzJFZFQ1RPUiwgZnVuY3Rpb24oeCkgewogIHZlY3Rvcl9kZXNjclt4XVtbMV1dCn0pCmBgYAoKCgoKIyMgQ2FuYWRpYW4gRWNvbm9taWMgRGFzaGJvYXJkIAoKIyMjIFJldGFpbCBTYWxlcyAmIEhvdXJzIFdvcmtlZAoKYGBge3J9CnAgPC0gZ2dwbG90KGluZGljYXRvcnMsIGFlcyh4PVJFRl9EQVRFLCB5PVZBTFVFX0lOREVYKSkgKyBnZW9tX2xpbmUoKGFlcyhncm91cD1kZXNjciwgY29sb3I9ZGVzY3IpKSkgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcz0iMiBtb250aCIsIGRhdGVfbGFiZWxzPSIlYiAlWSIsIGxpbWl0cyA9IGFzLkRhdGUoYygnMjAxOS0wMS0wMScsJzIwMjAtMDYtMDEnKSkpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1zZXEoMCwgMTgwLDIwKSwgbGltaXRzPSBjKDAsIDE4MCkpICsgbGFicyh0aXRsZT0nSW5kZXgsIERlY2VtYmVyIDIwMTk9MTAwJywgeD0nJywgeT0nJykKZ2dwbG90bHkocCkKYGBgCgoKCgpgYGB7ciBmaWcsIGZpZy53aWR0aCA9IDE2LCBmaWcuaGVpZ2h0PTZ9CnJldGFpbF9zYWxlc19wbG90ID0gZ2dwbG90KCkgKyBnZW9tX2xpbmUoZGF0YT1yZXRhaWxfc2FsZXNfY2FuLCBhZXMoeD1SRUZfREFURSwgeT1WQUxVRV9JTkRFWCwgY29sb3I9J2dyZWVuJykpCmhvdXJzX3dvcmtlZF9wbG90ID0gZ2VvbV9saW5lKGRhdGE9aG91cnNfd29ya2VkX2luZHVzdHJpZXMsIGFlcyh4PVJFRl9EQVRFLCB5PVZBTFVFX0lOREVYLCBjb2xvcj0nYmx1ZScpKSAKCnBsb3QgPSByZXRhaWxfc2FsZXNfcGxvdCArICBob3Vyc193b3JrZWRfcGxvdCArIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcz0iMiBtb250aCIsIGRhdGVfbGFiZWxzPSIlYiAlWSIsIGxpbWl0cyA9IGFzLkRhdGUoYygnMjAxOS0wMS0wMScsJzIwMjAtMDYtMDEnKSkpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1zZXEoNzAsIDEwNSw1KSwgbGltaXRzPSBjKDcwLCAxMDUpKSArIHNjYWxlX2NvbG9yX21hbnVhbChsYWJlbHMgPSBjKCJSZXRhaWwgdHJhZGUgc2FsZXMgKGRvbGxhcnMpIiwgIkFjdHVhbCBob3VycyB3b3JrZWQiKSwgdmFsdWVzID0gYygiYmx1ZSIsICJyZWQiKSkgKyBsYWJzKGNvbG9yPSdMZWdlbmQnKQpwbG90CiNnZ3Bsb3RseShwbG90KQpgYGAKCiMjIEFsbCBUaW1lIFNlcmllcwoKYGBge3J9CjwgLSAKYGBgCgoKCgpgYGB7cn0KI3NlbGVjdChob3Vyc193b3JrZWRfcGxvdCwgYygiVkFMVUVTIikpCmhvdXJzX3dvcmtlZF9pbmR1c3RyaWVzICU+JSBzZWxlY3QoUkVGX0RBVEUsIFZBTFVFX0lOREVYKQpgYGAKCgpgYGB7cn0KZ2dwbG90KCkgKyBnZW9tX2xpbmUoZGF0YT1ob3Vyc193b3JrZWRfaW5kdXN0cmllcywgYWVzKHg9UkVGX0RBVEUsIHk9VkFMVUVfSU5ERVgpKSAKYGBgCgoK